﻿using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
using Newtonsoft.Json.Linq;

namespace BlogsAPI.BlogsYandex
{
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Text;
    using System.IO;
    using System.Net;
    using Abstract;

    /// <summary>
    /// Работа с различными словами
    /// </summary>
    public class Words : WebInterface
    {
        /// <summary>
        /// Получение данных по частотам фраз
        /// </summary>
        readonly Regex oFrequency = new Regex(@"<tr\s+class\W+tlist.*?(?:<a)[^>]+>([^<]+)<.*?(?:<td\s+class)[^>]+>([\d]+)<",
                Regexoptions);

        /// <summary>
        /// Нахождение всех зацитированных слов-фраз
        /// </summary>
        readonly Regex oQuoted = new Regex(@"""([\s\w]+)""", Regexoptions);

        /// <summary>
        /// получение частот запросов различных слов
        /// </summary>
        /// <param name="words">слова</param>
        /// <returns>справочник типа слово-частота</returns>
        [Obsolete("Bugged =(")]
        public Dictionary<string,int> GetWordFrequency(string words)
        {
            var oRet = new Dictionary<string, int>(0);
            try
            {
                //sCookie = "fuid01=495a64420d2ee85a.iKsJFz9mCL5sVNwHdUWGZEmzkaKZbclyRAh9LR79m68CXVPZo608bgGX987c8zFiG2JdQ0-v5bJu8l-MQUolK-gfsBxVG4wJGkwRz8n_9sP0X8tK8xJe9sDH88LkOkCo;";
                string sLink = String.Format("https://wordstat.yandex.ru/#!/?words={0}", words);
                HttpWebRequest myHttpWebRequest = MakeRequest(sLink);
                myHttpWebRequest.Method = "GET"; // метод GET
                myHttpWebRequest.Referer = "https://wordstat.yandex.ru/";
                //получаем ответ и его разбираем...
                HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
                Encoding qwe = Encoding.UTF8;
                try
                {
                    qwe = Encoding.GetEncoding(myHttpWebResponse.CharacterSet);
                }
                catch
                {
                }
                string result = new StreamReader(myHttpWebResponse.GetResponseStream(), qwe).ReadToEnd().Replace("\n", "").Replace("\r", "");
                myHttpWebResponse.Close();
                //теперь парсим результат
                MatchCollection mc = oFrequency.Matches(result);
                if(mc.Count>0)
                {
                    foreach (Match match in mc.Cast<Match>().Where(match => !oRet.ContainsKey(match.Groups[1].Value)))
                    {
                        oRet.Add(match.Groups[1].Value, int.Parse(match.Groups[2].Value));
                    }
                }
            }catch(Exception e1)
            {
                Debug.WriteLine(e1.Message +"\n"+e1.StackTrace);
            }
            return oRet;
        }

        /// <summary>
        /// Считываем популярные продолжения фраз
        /// </summary>
        /// <param name="word"></param>
        /// <returns></returns>
        public List<String> GetWordContinue(string word)
        {
            List<String> oRet = new List<string>(0);
            try
            {
                //%D1%82%D0%B5%D1%80%D0%B0%D0%BF%D0%B8%D1%8F
                string sLink = String.Format("http://suggest.yandex.ru/suggest-ff.cgi?part={0}", 
                    HttpUtility.UrlEncode(word));
                HttpWebRequest myHttpWebRequest = MakeRequest(sLink);
                myHttpWebRequest.Method = "GET"; // метод GET
                myHttpWebRequest.Referer = "http://suggest.yandex.ru/";
                //получаем ответ и его разбираем...
                HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
                Encoding qwe = Encoding.UTF8;
                try
                {
                    qwe = Encoding.GetEncoding(myHttpWebResponse.CharacterSet);
                }
                catch
                {
                }
                string result = new StreamReader(myHttpWebResponse.GetResponseStream(), qwe).ReadToEnd().Replace("\n", "").Replace("\r", "");
                myHttpWebResponse.Close();
                MatchCollection mc = oQuoted.Matches(result);
                if (mc.Count > 0)
                {
                    foreach (Match match in mc.Cast<Match>().Where(match => !oRet.Contains(match.Groups[1].Value)))
                    {
                        oRet.Add(match.Groups[1].Value);
                    }
                }
            }catch(Exception e1)
            {
                Debug.WriteLine(e1.Message + "\n" + e1.StackTrace);
            }
            return oRet;
        }
    }
}
